#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QSplitter>
#include <QVector>
#include <QListWidget>
#include <QLabel>
#include <QMouseEvent>

#include "messageshowarea.h"
#include "messageeditarea.h"
#include "addfrienddialog.h"
#include "choosefrienddialog.h"
#include "selfinfowidget.h"
#include "sessiondetailwidget.h"
#include "userinfowidget.h"
#include "sessionfriendarea.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

private:
    static MainWidget* instance;
    // 对于单例模式来说，最关键的部分，不是 "创建实例" ，而是限制别人创建实例
    MainWidget(QWidget *parent = nullptr);
public:
    static MainWidget* getInstance();
    ~MainWidget();

private:
    Ui::MainWidget *ui;
    QSplitter* mainSplitter; // 主分割器
    QWidget* windowLeft;
    QWidget* windowRight;
    QListWidget* sessionList; // 会话列表
    // 聊天区相关
    QWidget* titleBar;
    QLabel* titleLabel;
    QPushButton* backBtn;
    QPushButton* noteBtn;
    MessageShowArea* messageShowArea;      // 消息展示区
    MessageEditArea* messageEditArea;      // 消息编辑区
    // 输入区相关
    QWidget* inputBar;
    QTextEdit* inputEdit;
    QPushButton* emojiBtn;
    QPushButton* sendBtn;
    // 自定义窗口控制按钮
    QPushButton* closeBtn;
    QPushButton* minBtn;
    QPushButton* maxBtn;
    // 自定义窗口控制栏
    QWidget* windowControlBar;
    QPoint dragPosition;
    bool dragging = false;
    SessionFriendArea* sessionFriendArea;  // 会话/好友/申请滚动区

    // 统一管理的弹窗/对话框类（按需new，避免重复new）
    AddFriendDialog* addFriendDialog = nullptr;            // 添加好友对话框
    ChooseFriendDialog* chooseFriendDialog = nullptr;      // 选择好友对话框
    SelfInfoWidget* selfInfoWidget = nullptr;              // 个人信息窗口
    SessionDetailWidget* sessionDetailWidget = nullptr;    // 会话详情窗口
    UserInfoWidget* userInfoWidget = nullptr;              // 用户信息窗口

    void initMainWindow();
    void initLeftWindow();
    void initRightWindow();
    void initSignalSlot();
    void loadSessionList();
    void loadFriendList();
    void loadApplyList();

protected:
    void mousePressEvent(QMouseEvent* event) override;
    void mouseMoveEvent(QMouseEvent* event) override;
    void mouseReleaseEvent(QMouseEvent* event) override;
    void mouseDoubleClickEvent(QMouseEvent* event) override;

};
#endif // MAINWIDGET_H
